package com.itce.arco.basenote;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class BaseNote {
    public static void main(String[] args) {
        test19();
    }
    private static void test1(){
        System.out.println("HelloWorld");
    }
    public static void test2(){
        /*5种常量*/
//        字符串常量、整数常量、小数常量、字符常量、布尔常量

        /*8种数据类型*/
        //byte、short、int、lang
        //float、double
        //char
        //boolean
        /* 定义8中数据类型 */
        byte a = 100;
        short b = 200;
        int c = 300;
        long d = 400;
        float f = 500;
        /*变量定义*/
        int aa;
        aa = 100;
        int bb = 100;
        int cc =10,dd = 200;
    }
    public static void test3(){
        /*键盘录入*/
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        String s = scanner.next();
        System.out.println(a);
        System.out.println(s);
        Scanner scanner1 = new Scanner(System.in);
    }
    public static void test4(){
        /*类型转换*/
        int  a = 10;
        double b = a;
        System.out.println(b);
        double c = 10.1;
        int d = (int)c;
        System.out.println(d);
    }
    public static void test5(){
        /*idea的结构
        * Project
        * Module
        * Package
        * Class*/
        /*快捷键
        * psvm
        * sout
        * c*/
        /*加减乘除取余
        * +
        * —
        * *
        * /
        * %
        */
    }
    public static void test6() {
//        三元运算符
//        数据类型 变量名称 = 关系表达式 ？ 结果1 ： 结果2
       /* 关系表达式的结果是true，结果1当作最终结果
                关系表达式的结果是false，结果2当作最终结果*/
        float a = 0.1f;
        double b= 0.3;
        int s = a>b ? 1 : 2;
        System.err.println(s);
        System.err.println("123");
    }
    public static void test7() {
        int a = 5;
        switch (a) {
            case 1:
                System.out.println(1);
                break;
            case 2:
                System.out.println(2);
                break;
            case 3:
                System.out.println(3);
                break;
            case 4:
                System.out.println(4);
            default:
                System.out.println("结束");
        }
        /*注意事项
        * 类型可以是：byte、short、int、char、String、枚举
        * case穿透现象：
        * 当case中的语句执行完毕，而没有遇到break时，程序会无条件执行后续的case或者default中的语句，直到遇到break语句或者整个switch中的语句执行结结束为止*/
    }
    public static void test8(){
        int a = 30;
        if  (a>20) {
            System.out.println("if的第一种格式");
        }
        if (a<20) {
            System.out.println("if的第二种格式：if");
        } else{
            System.out.println("if的第二种格式：else");
        }
        if (a==30) {
            System.out.println("if的第三种格式：if");
        } else if (a<30) {
            System.out.println("if的第三种格式：elseif");
        } else {
            System.out.println("if的第三种格式：else");
        }
    }
    public static void test9(){
//        数组的作用：可以存储相同数据类型的多个数据，把多个数据放在一个数组中方便使用
        /*数组的定义：两种写法
        动态初始化：
        数据类型[] 数组名称 = new 数据类型[30];
        静态初始化：
        数据类型[] 数组名称 = new 数据类型[]{元素1，元素2...}
        数据类型[] 数组名 = {元素1，元素1，元素1，元素1。。。}*/
        //int[] arr = new int[4];默认值是0
        //double[] arr = new double[4];默认值是0.0
        //char[] arr = new char[4];默认值是空字符
//        boolean[] arr = new boolean[4];默认值是false
//        String[] arr = new String[4];m默认值是null
//        System.out.println(arr[0]);
        int[] brr = {1,2,3,45};
        System.out.println(brr[0]);
        System.out.println(brr[1]);
        System.out.println(brr[2]);
        System.out.println(brr[3]);
    }
    public static void test10(){
/*
        栈内存：存放运行方法和方法中的变量
        堆内存：存放new方法产生的数据（数组内的数据）
        两个常见的异常：索引越界异常和null指针异常
        索引越界：就是访问了不存在的索引
        null指针异常：给数组赋值为空，然后对数组进行了数组的方法进行操作。
*/
        int[] arr = {120,130,110,125,128,164};
//        打印大于等于130的元素
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]>=130) {
                System.err.println("数组中大于等于130的元素："+arr[i]);
            }
        }
//求数组的和;
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.println("数组的和："+sum);
//        求数组的平均数据
        double sum1 = 0.0;
        double average = 0.0;
        for (int i = 0; i < arr.length; i++) {
            sum1 += arr[i];
        }
        average = sum1/arr.length;
        System.out.println("数组的和：" + sum1+ ",数组的平均数：" +average);
//        求数组的最小值
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i]<min) {
                min = arr[i];
            }
        }
        System.out.println("数组的最小值："+ min);
//        给一个长度为5的空数组输入5个数，用键盘输入
//        int[] crr = new int[5];
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("请输入5个数：");
//        for (int i = 0; i <crr.length ; i++) {
//            int a = scanner.nextInt();
//            crr[i] = a;
//        }
//        System.out.println(Arrays.toString(crr));
//        随机生成5个数放在数组里面
        int[] crr = new int[5];
        Random random = new Random();
        for (int i = 0; i < crr.length; i++) {
            crr[i] = random.nextInt(100) + 1;
        }
        System.out.println(Arrays.toString(crr));
//        二维数组
        int[][] irr = {{1,2,3},{10,20,30},{70,80,90}};
//        遍历这个二维数组
        for (int i = 0; i < irr.length; i++) {
            for (int j = 0; j < irr[i].length; j++) {
                System.out.println(irr[i][j]);
            }
        }
    }
    public static void test11(){
//        基础练习
        /*有以下数组，存储了公司5名员工的年龄：
        {29, 35, 38, 56, 21}
        请定义方法getSum()可以求出这个数组的“所有偶数的年龄的和”并返回。*/
        int[] arr = new int[]{29, 35, 38, 56, 21};
        int sum = getSum(arr);
        System.out.println(sum);

    }
//    1.2求数组中数字不包含7的，并且是偶数的数字的累加和：
    public static void  test12() {
        /*请定义方法，可以求出一个整数数组中“不包含7的并且是偶数”的元素的累加和，并返回结果。
        定义main()方法，定义一个10个长度的数组，并从控制台接收10个两位的整数填充数组，
        调用这个方法，接收返回值并打印：*/
        int[] arr = new int[10];
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(90) + 10;
        }
        int sum1 = getSum1(arr);
        System.out.println(Arrays.toString(arr));
        System.out.println(sum1);
    }
    // 1.3 打印数组中偶数索引位置的元素：
    public static void test13() {
//        有以下数组：
//        int[] arr = {21,22,23,24,25,26};
//        请定义方法printArray()，可以打印一个数组中偶数索引位置的元素。
        int[] arr = {21,22,23,24,25,26};
        printArray(arr);
    }
//    1.4 计算数组中：偶数索引位置上，并且元素是偶数的累加和：
    public static void test14() {
//        有以下数组：
//        int[] arr = {21,22,23,24,25,26};
//        请定义方法getSum()，计算数组中：偶数索引位置上，并且元素是偶数的累加和。
        int[] arr = {21,22,23,24,25,26};
        System.out.println("偶数索引位置上，并且元素是偶数的累加和" + getSum2(arr));
    }
//    1.6 查找元素在数组中索引位置
    public static void test15(){
        int[] arr = new int[10];
        Scanner scanner = new Scanner(System.in);
        System.out.println("请在数组中输入10个数");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scanner.nextInt();
        }
        System.out.println("请输入一个整数：");
        int a = scanner.nextInt();
        findNum(arr,a);
    }
//    1.8 评委打分：
    public static void test16(){
        int arr[] = new int[6];
        Scanner scanner = new Scanner(System.in);
        System.out.println("请评委打分");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scanner.nextInt();
        }
        finalScore(arr);
    }
    // 计算出5位数的回文数和7位数的回文数相差了多少
    public static  void test17() {
        System.out.println("5位数的回文数" + getCountPalindromic(5));
        System.out.println("7位数的回文数" + getCountPalindromic(7));
        System.out.println("5位数的回文数和7位数的回文数相差：" + (getCountPalindromic(7)-getCountPalindromic(5)));
    }
    // 键盘录入10个整数存入数组中，定义一个方法将奇数放在数组的左侧，偶数放在数组的右侧
    public static void test18(){
        int[] arr = new int[10];
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入10个整数");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scanner.nextInt();
        }
        System.out.println("c操作前："+Arrays.toString(arr));
        operateNumeric(arr);
        System.out.println("c操作后："+Arrays.toString(arr));
    }
    // 求前20项之和
    public static void test19(){
        double denominator=1,numerator=2,tempSum;
        double sum=2/1;
        System.out.println("序列值是：");
        for (int i = 0; i < 19; i++) {
            tempSum = denominator + numerator;
            denominator = numerator;
            numerator = tempSum;
            sum += numerator/denominator;
            System.out.print(numerator+"/"+denominator+",");
        }
        System.out.println("计算结果是："+sum);
        System.out.println("计算结果是："+sum);
    }
    public static void operateNumeric(int[] arr){
        int tempNumeric;
        for (int i = 0; i < arr.length; i++) {
            for (int j = i; j < arr.length; j++) {
                if (arr[i]%2==0 && arr[j]%2!=0){
                    tempNumeric = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tempNumeric;
                }
            }
        }
    }
    public static int  getCountPalindromic(int places){
        int count = 0;
        int beginNum = (int)Math.pow(10,places-1);
        int endNum = (int)Math.pow(10,places) -1;

        for (int i = beginNum; i <= endNum ; i++) {
            String value = String.valueOf(i);
            boolean isPalindromic = true;
            for (int j = 0; j < places / 2; j++) {
                if(value.charAt(j) != value.charAt(places-1-j)) {
                    isPalindromic = false;
                    break;
                }
            }
            if (isPalindromic) count++;
        }
        return count;
    }
    public static void finalScore(int[] arr){
        int max = arr[0];
        int min = arr[0];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
            if (min > arr[i]) {
                min = arr[i];
            }
            sum += arr[i];
        }
        int average = (sum - min - max)/4;
        System.out.println("这位选手的最终得分是："+average);
    }
    public static void findNum(int[] arr, int a){
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == a) {
                System.out.println("整数在数组中的索引是：" + i);
                return;
            }
        }
    }
    public static int getSum2(int[] arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (i%2==0 && arr[i]%2==0){
                sum += arr[i];
            }
        }
        return sum;
    }
    public static void  printArray( int[] arr){
        for (int i = 0; i < arr.length; i++) {
            if (i%2==0){
                System.out.println("数组中索引为偶数的数："+arr[i]);
            }
        }
    }
    public static int getSum1(int[] arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]%2==0 && (arr[i]/10)%7!=0){
                sum += arr[i];
            }
        }
        return sum;
    }
    public static int getSum(int[] arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 2 == 0) {
                sum +=arr[i];
            }
        }
        return sum;
    }
}
